/*
 *  Cero Project - Copyright   2006 The Cero Developement Team 
 *  (Michael Laguerre, Camille Roux, Matthieu Segret, Mathieu Sivade) 
 * 
 *  This program is free software; you can redistribute it and/or modify it 
 *  under the terms of the GNU General Public License as published by the Free 
 *  Software Foundation; either version 2 of the License, or (at your option) 
 *  any later version.
 * 
 *  This program is distributed in the hope that it will be useful, but 
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 *  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
 *  for more details.
 */

package org.ceroproject.ui.commandline;

/**
 * Permet de d�couper une commande et en extraire les noms d'objets ou de
 * commandes
 * 
 * @author Mathieu Sivade
 */
public class CommandCutter {
	/**
	 * Extrait le nom de la commande d'une String repr�sentant une commande
	 * Complexit� d'ordre (n*substring) (n : nombre d'espaces dans
	 * chainecommande)
	 * 
	 * @param chainecommande
	 *            String repr�sentant la commande
	 * @param listeur
	 *            Liste des commandes possibles
	 * @return La commande correspondant � la demande
	 */
	public static Command commandExtract(String chainecommande,
			CommandLister listeur) {
		Command resultat = null;
		// on teste tout les noms de commandes possibles dans l'ordre de
		// longueur (s�par�s par des espaces)
		int finnomcommande = 0;
		String nomcommandepotentielle;

		chainecommande = chainecommande.trim();
		while (finnomcommande < chainecommande.length()) {
			finnomcommande = chainecommande.indexOf(':', finnomcommande + 1);
			if (finnomcommande < 0)
				finnomcommande = chainecommande.length();
			nomcommandepotentielle = chainecommande
					.substring(0, finnomcommande);

			resultat = listeur
					.getCommandeCorrespondante(nomcommandepotentielle);
			if (resultat != null)
				break;
		}
		return resultat;
	}

	/**
	 * Extrait les param�tres d'un commande Complexit� d'ordre substring
	 * 
	 * @param chainecommande
	 *            String repr�sentant la commande
	 * @param commande
	 *            Commande repr�sent�e dans cette cha�ne
	 * @return Une String contenant uniquement les param�tres de la cha�ne
	 *         initiale
	 */
	public static String parametersExtract(String chainecommande,
			Command commande) {
		if (chainecommande.length() > commande.getNom().length())
			return chainecommande.substring(commande.getNom().length() + 1);
		else
			return "";
	}
}